# tools-extension-config.cmake
    # 用于 buildin.cmake 与外部引用的构建模式
    # 提供的宏：
        # add_tools_module_source_paths
        # add_tools_plugin_source_paths

# 1. add_tools_module_source_paths <VAR> [dir] [...]
# 构建一个变量
    # 基于给定的路径列表自动将所有 Qt 有关的源文件放入变量中
macro(add_tools_module_source_paths MODULE_SOURCE_VAR)
    set(MODULE_SOURCE_VAR_ARGN ${ARGN})
    # list(APPEND ${MODULE_SOURCE_VAR}_PATHS ${MODULE_SOURCE_VAR_ARGN})
    # spark_aux_source_directories(MODULE_SOURCE_VAR_FILES ${MODULE_SOURCE_VAR_ARGN})
    list(APPEND ${MODULE_SOURCE_VAR} ${MODULE_SOURCE_VAR_ARGN})
endmacro(add_tools_module_source_paths MODULE_SOURCE_VAR)


# add_tools_plugin_source_paths <target> [dir] [...]
# 构建一个库
    # 基于给定的路径列表自动将所有 Qt 有关的源文件构建为一个扩展库
macro(add_tools_plugin_source_paths MODULE_NAME_VAR)
    # 1. 在 macro 宏中设计接收所有内容的参数
    set(${MODULE_SOURCE_VAR}_ARGN ${ARGN})

    # 2. 使用内部的 add_tools_module_source_paths 获取所有的资源路径
    # add_tools_module_source_paths(${MODULE_SOURCE_VAR}_SOURCES
    #     ${${MODULE_SOURCE_VAR}_ARGN}
    # )
    
    # 3. 构建扩展库，并生成到 plugins 目录
    spark_add_library_path(${MODULE_NAME_VAR} SHARED ${${MODULE_SOURCE_VAR}_ARGN})
    set_target_properties(${MODULE_NAME_VAR} 
        PROPERTIES 
            LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/plugins)
    
    # 补充: 将构建扩展库描述的源代码位置使用 include 
    # target_include_directories(${MODULE_NAME_VAR} PRIVATE
    #     ${${MODULE_SOURCE_VAR}_SOURCE_PATHS}
    # )

    # 4. 扩展库应满足基本的 Qt 依赖
    target_link_libraries(${MODULE_NAME_VAR} 
        PUBLIC 
            Qt5::Core Qt5::Widgets)

    # 5. 扩展库将安装到指定位置
    install(TARGETS ${MODULE_NAME_VAR} 
        DESTINATION lib/zToolsBox/plugins)

endmacro(add_tools_plugin_source_paths MODULE_NAME_VAR)


# 1. 在 builtin 模块中可使用(tools.cmake)
# find_package(tools-extension PATHS cmake/modules) # builtin

# add_tools_module_source_paths(<MODULE_SOURCE_VAR>
#     ${CMAKE_CURRENT_LIST_DIR}
#     ${CMAKE_CURRENT_LIST_DIR}/MoreSourceDir
# )


# 2. 在 external 模块中可使用(CMakeLists.txt)
# 


# 3. 在外部其它项目使用时，简化使用方式与构建模块的内容(CMakeLists.txt)
# 可参考 examples 中的内容
# find_package(zTools)

# if(zTools_FOUND)

#     # 这是为 zToolsBox 自动构建扩展的模块
#     add_tools_plugin_source_paths(ExampleExtension
#         ${CMAKE_CURRENT_LIST_DIR}
#         ${CMAKE_CURRENT_LIST_DIR}/ExampleWidget
#     )
#     target_include_directories(ExampleExtension
#         PUBLIC
#             ${CMAKE_BINARY_DIR}
#     )

# endif(zTools_FOUND)

